package com.tqz.juc.jmm;

/**
 * <p>懒汉式单例，进行双重检查判断实例是否为空，
 * 尽管双重检查，但是高并发场景下可能还是会出现问题。 加上volatile可保证不会创建多次。
 *
 * @author tianqingzhao
 * @since 2022/1/16 0:23
 */
public class DoubleCheckLockTest {
    
    private volatile static DoubleCheckLockTest instance;
    
    private DoubleCheckLockTest() {
    }
    
    public static DoubleCheckLockTest getInstance() {
        //第一次检测
        if (instance == null) {
            //同步
            synchronized (DoubleCheckLockTest.class) {
                if (instance == null) {
                    //多线程环境下可能会出现问题的地方
                    instance = new DoubleCheckLockTest();
                }
            }
        }
        return instance;
    }
}